package apis

import (
	"gitee.com/sansaniot/ssiot-core/httpmvc/api"
	"gitee.com/sansaniot/ssiot-core/serrors"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"

	"ssnotify/common/enums/notifyread"
	"ssnotify/internal/notify/models"
	"ssnotify/internal/notify/models/command"
	"ssnotify/internal/notify/models/query"
)

type NotifyRecord struct {
	api.Api
}

// 查询告警记录
func (e NotifyRecord) FindNotifyRecordList(c *gin.Context) {
	// 请求参数
	req := query.NotifyRecordQuery{}
	// 模型
	m := models.NotifyRecord{}
	// 上下文
	err := e.MakeContext(c).Bind(&req).MakeModel(&m.Model).Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 执行
	var result interface{}
	req.LoadUser(c)
	if err, result = m.FindNotifyRecordList(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(result)
}

// 查询告警记录未读计数
func (e NotifyRecord) GetSubCount(c *gin.Context) {
	// 请求参数
	req := query.NotifyRecordQuery{}
	// 模型
	m := models.NotifyRecord{}
	// 上下文
	err := e.MakeContext(c).Bind(&req).MakeModel(&m.Model).Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 执行
	var count int64
	req.ReadStatus = notifyread.NotRead.Get().Key
	req.LoadUser(c)
	if err = m.FindNotifyRecordCount(&req, &count); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(count)
}

// 已读记录
func (e NotifyRecord) ReadNotifyRecord(c *gin.Context) {
	// 请求参数
	req := command.NotifyRecordReadReq{}
	// 模型
	m := &models.NotifyRecord{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&m.Model).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 用户信息
	req.LoadUser(c)
	// 执行
	if err = m.ReadNotifyRecord(req.UserId, req.Id); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(nil)
}
